﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MusicPlayerPlus.Interface.Base.Action.Output;
using MusicPlayerPlus.Core.Reflection.ActionParam.Action.Output;
using System.Reflection;

namespace MusicPlayerPlus.Core.Reflection.Action.Output
{
    #region Base
    
    /// <summary>
    /// 输出信息到日志接口
    /// </summary>
    public class RInputLogAction : RAPBase<IInputLogAction, APInputLogAction>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        /// <param name="item"></param>
        /// <param name="obj"></param>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("InputLog_Action");

            SetValue(obj, property, AcitonParam.InputLog);
        }
    }

    /// <summary>
    /// 添加按钮动作接口
    /// </summary>
    public class RAddToButtonAction : RAPBase<IAddToButtonAction, APAddToButtonAction>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        /// <param name="item"></param>
        /// <param name="obj"></param>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("AddToButton_Action");

            SetValue(obj, property, AcitonParam.AddToButton);
        }
    }
    /// <summary>
    /// 添加菜单动作接口
    /// </summary>
    public class RAddToMenuAction : RAPBase<IAddToMenuAction, APAddToMenuAction>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        /// <param name="item"></param>
        /// <param name="obj"></param>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("AddToMenu_Action");

            SetValue(obj, property, AcitonParam.AddToMenu);
        }
    }





    /// <summary>
    /// 设置主窗体
    /// </summary>
    public class RSetMainWindow : RAPBase<ISetMainWindow, APSetMainWindow>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        /// <param name="item"></param>
        /// <param name="obj"></param>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("SetMainWindow");

            SetValue(obj, property, AcitonParam.SetMainWindow);
        }
    }

    /// <summary>
    /// 主窗体 显示
    /// </summary>
    public class RMainWindowShow : RAPBase<IMainWindowShow, APMainWindowShow>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        /// <param name="item"></param>
        /// <param name="obj"></param>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("MainWindowShow");

            SetValue(obj, property, AcitonParam.MainWindowShow);
        }
    }

    /// <summary>
    /// 主窗体 隐藏
    /// </summary>
    public class RMainWindowHide : RAPBase<IMainWindowHide, APMainWindowHide>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        /// <param name="item"></param>
        /// <param name="obj"></param>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("MainWindowHide");

            SetValue(obj, property, AcitonParam.MainWindowHide);
        }
    }



    /// <summary>
    /// 主窗体 最小化
    /// </summary>
    public class RMainWindowMin : RAPBase<IMainWindowMin, APMainWindowMin>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        /// <param name="item"></param>
        /// <param name="obj"></param>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("MainWindowMin");

            SetValue(obj, property, AcitonParam.MainWindowMin);
        }
    }

    /// <summary>
    /// 主窗体 最大化
    /// </summary>
    public class RMainWindowMax : RAPBase<IMainWindowMax, APMainWindowMax>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        /// <param name="item"></param>
        /// <param name="obj"></param>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("MainWindowMax");

            SetValue(obj, property, AcitonParam.MainWindowMax);
        }
    }

    #endregion

    #region Media

    /// <summary>
    /// (改变后事件)进度条改变
    /// </summary>
    public class RTimeLineChangeAction : RAPBase<ITimeLineChangeAction, APTimeLineChangeAction>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        /// <param name="item"></param>
        /// <param name="obj"></param>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("TimeLineChange_Action");

            SetValue(obj, property, AcitonParam.TimeLineChange);
        }
    }
    /// <summary>
    /// (主动)进度条改变
    /// </summary>
    public class RChangeTimeLineAction : RAPBase<IChangeTimeLineAction, APChangeTimeLineAction>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        /// <param name="item"></param>
        /// <param name="obj"></param>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("ChangeTimeLine_Action");

            SetValue(obj, property, AcitonParam.ChangeTimeLine);
        }
    }
    /// <summary>
    /// (改变后事件)音量改变
    /// </summary>
    public class RVolumeChangeAction : RAPBase<IVolumeChangeAction, APVolumeChangeAction>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        /// <param name="item"></param>
        /// <param name="obj"></param>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("VolumeChange_Action");

            SetValue(obj, property, AcitonParam.VolumeChange);
        }
    }
    /// <summary>
    /// (主动)音量改变
    /// </summary>
    public class RChangeVolumeAction : RAPBase<IChangeVolumeAction, APChangeVolumeAction>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        /// <param name="item"></param>
        /// <param name="obj"></param>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("ChangeVolume_Action");

            SetValue(obj, property, AcitonParam.ChangeVolume);
        }
    }
    /// <summary>
    /// 缓冲进度条改变
    /// </summary>
    public class RBufferingTimeLineChangeAction : RAPBase<IBufferingTimeLineChangeAction, APBufferingTimeLineChangeAction>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        /// <param name="item"></param>
        /// <param name="obj"></param>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("BufferingTimeLineChange_Action");

            SetValue(obj, property, AcitonParam.BufferingTimeLineChange);
        }
    }
    /// <summary>
    /// 播放状态改变
    /// </summary>
    public class RPlayStateChangeAction : RAPBase<IPlayStateChangeAction, APPlayStateChangeAction>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        /// <param name="item"></param>
        /// <param name="obj"></param>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("PlayStateChange_Action");

            SetValue(obj, property, AcitonParam.PlayStateChange);
        }
    }
    /// <summary>
    /// 播放顺序改变
    /// </summary>
    public class RPlayOrderChangeAction : RAPBase<IPlayOrderChangeAction, APPlayOrderChangeAction>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        /// <param name="item"></param>
        /// <param name="obj"></param>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("PlayPlayOrderChange_Action");

            SetValue(obj, property, AcitonParam.PlayPlayOrderChange);
        }
    }
    /// <summary>
    /// 播放
    /// </summary>
    public class RPlayAction : RAPBase<IPlayAction, APPlayAction>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        /// <param name="item"></param>
        /// <param name="obj"></param>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("Play_Action");

            SetValue(obj, property, AcitonParam.Play);
        }
    }
    /// <summary>
    /// 暂停
    /// </summary>
    public class RPauseAction : RAPBase<IPauseAction, APPauseAction>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        /// <param name="item"></param>
        /// <param name="obj"></param>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("Pause_Action");

            SetValue(obj, property, AcitonParam.Pause);
        }
    }
    /// <summary>
    /// 停止
    /// </summary>
    public class RStopAction : RAPBase<IStopAction, APStopAction>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        /// <param name="item"></param>
        /// <param name="obj"></param>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("Stop_Action");

            SetValue(obj, property, AcitonParam.Stop);
        }
    }
    /// <summary>
    /// 上一首
    /// </summary>
    public class RPreviousTrackAction : RAPBase<IPreviousTrackAction, APPreviousTrackAction>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        /// <param name="item"></param>
        /// <param name="obj"></param>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("PreviousTrack_Action");

            SetValue(obj, property, AcitonParam.PreviousTrack);
        }
    }
    /// <summary>
    /// 下一首
    /// </summary>
    public class RNextTrackAction : RAPBase<INextTrackAction, APNextTrackAction>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        /// <param name="item"></param>
        /// <param name="obj"></param>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("NextTrack_Action");

            SetValue(obj, property, AcitonParam.NextTrack);
        }
    }

    #endregion

    #region MusicList

    /// <summary>
    /// 获取列表
    /// </summary>
    public class RGetMusicListAction : RAPBase<IGetMusicListAction, APGetMusicListAction>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        /// <param name="item"></param>
        /// <param name="obj"></param>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("GetMusicList_Action");

            SetValue(obj, property, AcitonParam.GetMusicList);
        }
    }
    /// <summary>
    /// 改变列表
    /// </summary>
    public class RChangeMusicListAction : RAPBase<IChangeMusicListAction, APChangeMusicListAction>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        /// <param name="item"></param>
        /// <param name="obj"></param>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("ChangeMusicList_Action");

            SetValue(obj, property, AcitonParam.ChangeMusicList);
        }
    }
    /// <summary>
    /// 添加列表
    /// </summary>
    public class RAddMusicListAction : RAPBase<IAddMusicListAction, APAddMusicListAction>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        /// <param name="item"></param>
        /// <param name="obj"></param>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("AddMusicList_Action");

            SetValue(obj, property, AcitonParam.AddMusicList);
        }
    }
    /// <summary>
    /// 获取播放的音乐
    /// </summary>
    public class RGetPlayMusicAction : RAPBase<IGetPlayMusicAction, APGetPlayMusicAction>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        /// <param name="item"></param>
        /// <param name="obj"></param>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("GetPlayMusic_Action");

            SetValue(obj, property, AcitonParam.GetPlayMusic);
        }
    }
    /// <summary>
    /// 获取播放的音乐
    /// </summary>
    public class RSetPlayMusicAction : RAPBase<ISetPlayMusicAction, APSetPlayMusicAction>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        /// <param name="item"></param>
        /// <param name="obj"></param>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("SetPlayMusic_Action");

            SetValue(obj, property, AcitonParam.SetPlayMusic);
        }
    }
    /// <summary>
    /// 添加歌曲
    /// </summary>
    public class RAddMusicAction : RAPBase<IAddMusicAction, APAddMusicAction>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        /// <param name="item"></param>
        /// <param name="obj"></param>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("AddMusic_Action");

            SetValue(obj, property, AcitonParam.AddMusic);
        }
    }
    /// <summary>
    /// 改变歌曲
    /// </summary>
    public class RChangeMusicAction : RAPBase<IChangeMusicAction, APChangeMusicAction>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        /// <param name="item"></param>
        /// <param name="obj"></param>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("ChangeMusic_Action");

            SetValue(obj, property, AcitonParam.ChangeMusic);
        }
    }
    /// <summary>
    /// 删除歌曲
    /// </summary>
    public class RDeleteMusicAction : RAPBase<IDeleteMusicAction, APDeleteMusicAction>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        /// <param name="item"></param>
        /// <param name="obj"></param>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("DeleteMusic_Action");

            SetValue(obj, property, AcitonParam.DeleteMusic);
        }
    }
    #endregion

    #region PlayList

    /// <summary>
    /// 获取所有的播放列表
    /// </summary>
    public class RGetPlayListAction : RAPBase<IGetPlayListAction, APGetPlayListAction>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("GetPlayList_Action");

            SetValue(obj, property, AcitonParam.GetPlayList);
        }
    }
    /// <summary>
    /// 改变播放列表
    /// </summary>
    public class RChangePlayListAction : RAPBase<IChangePlayListAction, APChangePlayListAction>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("ChangePlayList_Action");

            SetValue(obj, property, AcitonParam.ChangePlayList);
        }
    }
    /// <summary>
    /// 添加播放列表
    /// </summary>
    public class RAddPlayListAction : RAPBase<IAddPlayListAction, APAddPlayListAction>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("AddPlayList_Action");

            SetValue(obj, property, AcitonParam.AddPlayList);
        }
    }
    /// <summary>
    /// 删除播放列表
    /// </summary>
    public class RDeletePlayListAction : RAPBase<IDeletePlayListAction, APDeletePlayListAction>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("DeletePlayList_Action");

            SetValue(obj, property, AcitonParam.DeletePlayList);
        }
    }


    /// <summary>
    /// 获取指定的播放列表
    /// </summary>
    public class RGetPlayListForGuidAction : RAPBase<IGetPlayListForGuidAction, APGetPlayListForGuidAction>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("GetPlayListForGuid_Action");

            SetValue(obj, property, AcitonParam.GetPlayListForGuid);
        }
    }


    /// <summary>
    /// 播放中的列表
    /// </summary>
    public class RGetPlayingPlayListAction : RAPBase<IGetPlayingPlayListAction, APGetPlayingPlayListAction>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("GetPlayingPlayList_Action");

            SetValue(obj, property, AcitonParam.GetPlayingPlayList);
        }
    }

    #endregion

    #region Dictionary

    /// <summary>
    /// 获取Dictionary数据
    /// </summary>
    public class RGetDictionaryData : RAPBase<IGetDictionaryData, APGetDictionaryData>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("GetDictionaryData_Action");

            SetValue(obj, property, AcitonParam.GetDictionaryData);
        }
    }
    /// <summary>
    /// 添加Dictionary数据
    /// </summary>
    public class RAddDictionaryData : RAPBase<IAddDictionaryData, APAddDictionaryData>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("AddDictionaryData_Action");

            SetValue(obj, property, AcitonParam.AddDictionaryData);
        }
    }
    /// <summary>
    /// 改变Dictionary数据
    /// </summary>
    public class RChangeDictionaryData : RAPBase<IChangeDictionaryData, APChangeDictionaryData>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("ChangeDictionaryData_Action");

            SetValue(obj, property, AcitonParam.ChangeDictionaryData);
        }
    }
    /// <summary>
    /// 删除Dictionary数据
    /// </summary>
    public class RDeleteDictionaryData : RAPBase<IDeleteDictionaryData, APDeleteDictionaryData>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("DeleteDictionaryData_Action");

            SetValue(obj, property, AcitonParam.DeleteDictionaryData);
        }
    }

    /// <summary>
    /// 触发定向通道
    /// </summary>
    public class ROrientationAction : RAPBase<IOrientationAction, APOrientationAction>
    {
        /// <summary>
        /// 实例化继承该接口的所有方法
        /// </summary>
        protected override void Instantiation(Type classType, object obj)
        {
            PropertyInfo property = classType.GetProperty("OrientationAction_Action");

            SetValue(obj, property, AcitonParam.OrientationAction);
        }
    }
    #endregion
    
}
